package com.tedu.api;

import org.junit.Test;

/*API
*String 字符串类   不可改变类   BUG
* 假设：100000000个String类---内存
* 操作系统发现内存如果越来越小，会在硬盘上开辟空间----软件会卡
* 建议：储存字符串类似---String
*
* 可变
* StringBuilder类  创建字符串随时进行改变【修改，增加，插入】
* String不可改变的类，，频繁创建对象，带来内存损耗
* StringBuilder类解决内存损耗
* 创建方式：StringBuilder  sb=new StringBuilder（）;
*
* C语言       好处：创建对象，顺便对象进行销毁
*        例如：定义变量  int a=malloc（4）;       开辟四个空间
*                          a=1;
*                          free（a）；         清理内存
* Java语言    好处：创建完对象，不用管，等GC垃圾回收机制，进行回收
*         例如：定义变量 int a=1;    开辟空间，交给GC【使用方便】
 */
public class StringBuilderAPI {
    /**
     * java.lang包下
     * StringBuilder可变的字符串对象类
     * 什么情况下使用：有大量字符串拼接，建议StringBuilder
     * String str=“123”     String s=“456”        str+s出现新对象
     * append（）方法：拼接，等同于String加号意思
     */
    @Test
    public void testStringBuilder(){
        String str="你是我的";
        //创建一个空间符串，接收传入字符串【原有字符串上大量拼接】
        StringBuilder sb=new StringBuilder(str);     //不会产生新对象
        sb.append("小可爱~");
       // long end=System.currentTimeMillis();
        System.out.println("原来的对象："+sb);
    }
    /**
     * StringBuilder可变的字符串
     * replace（开始坐标，结束坐标，替换的字符串）替换  含头不含尾
     * 作用：可以将字符串中指定范围的内存替换成给定的字符串
     */
    @Test
    public void testReplace(){
        StringBuilder sb=new StringBuilder("你就是我的，小可爱~");
        sb=sb.replace(6,9,"小baby");
        System.out.println("SB替换后"+sb);
    }
    /**
     * StringBuilder与StringBuffer---可变字符串类【用法完全一致】
     * append方法，replace方法，insert方法通用
     * insert（）方法       返回值String
     * 作用：将给定的字符串插入到当前字符串中
     */
    @Test
    public void testInsert(){
        StringBuilder sb=new StringBuilder("你都是我的小可爱");
        sb=sb.insert(0,"从今以后的每一天");
        System.out.println("插入后的字符串："+sb);
    }
    //查API--spilt方法---数组下标越界
    //String字符串：重点：替换，截取【需要知道下标】，分割【获取部分子字符串】
    //StringBuilder与StringBuffer   【方法完全一致，功能：追加，插入，替换】
    //解决String类拼接【不要用+】 内存溢出--硬盘--程序会卡
    //“123”+“456”+“789”  牵扯拼接，，建议SB
    /**
     * StringBuilder与StringBuffer的区别？
     *
     * StringBuilder----JDK1.5----不考虑线程安全【程序效率高一些】
     *StringBuffer-----JDK1.0----考虑线程安全【程序效率低一些】
     * 其他用法完全一致
     */

}
